/*
    spdlog 是一个快速的日志库，采用了无锁设计，在多线程环境下表现出色。它利用了现代 C++ 的特性，如移动语义和完美转发，
    减少了不必要的拷贝操作，从而提高了日志记录的效率。而 glog 在多线程环境下可能会因为锁机制而产生性能瓶颈。
*/

#include "spdlog/spdlog.h"
#include "spdlog/sinks/stdout_color_sinks.h"
#include "spdlog/sinks/basic_file_sink.h"
#include <iostream>

int main(int argc, char* argv[])
{
    // 1.设置全局的刷新策略
    spdlog::flush_every(std::chrono::seconds(1));                       // 每秒刷新
    spdlog::flush_on(spdlog::level::level_enum::debug);                 // 遇到debug级别以上的日志，就刷新
    
    // 2.设置全局的日志输出等级————无所谓，每个日志器都可以单独设置
    spdlog::set_level(spdlog::level::level_enum::debug);                // 设置全局的日志输出等级为debug

    // 3.设置同步日志器（标准输出/文件）-- 工厂接口默认创建的就是同步日志器
    // auto logger = spdlog::stdout_color_mt("default-logger");         // 标准输出
    auto logger = spdlog::basic_logger_mt("file-logger", "sync.log");   // 文件输出

    // 4.设置日志器的刷新策略，以及设置日志器的输出等级
        // 这里测试就用全局的策略和等级......
    
    // 5.设置日志器的格式
    logger->set_pattern("[%n][%Y-%m-%d %H:%M:%S] [%-8l] %v");

    // 6.进行简单的日志输出
    logger->trace("你好！{}", "小明1");     //由于全局日志输出等级被设置为 debug ， trace 级别的日志默认不会输出
    logger->debug("你好！{}", "小明2");
    logger->info("你好！{}", "小明3");
    logger->warn("你好！{}", "小明4");
    logger->error("你好！{}", "小明5");
    logger->critical("你好！{}", "小明6");

    std::cout << "日志输出完毕！" << std::endl; 

    return 0;
}
